252c18
@@ -42,6 +42,9 @@
import org.omg.CSIIOP.TransportAddress;
 import org.omg.IOP.TAG_ALTERNATE_IIOP_ADDRESS;
 import org.omg.IOP.TAG_CSI_SEC_MECH_LIST;
 import org.omg.IOP.TaggedComponent;
+import org.omg.SSLIOP.SSL;
+import org.omg.SSLIOP.SSLHelper;
+import org.omg.SSLIOP.TAG_SSL_SEC_TRANS;
 import org.wildfly.iiop.openjdk.Constants;
 import org.wildfly.iiop.openjdk.SSLConfigValue;
 
@@ -100,8 +103,11 @@
public class CSIV2IORToSocketInfo implements IORToSocketInfo {
         SocketInfo socketInfo;
 
         TransportAddress sslAddress = selectSSLTransportAddress(ior);
+        SSL ssl = getSSL(ior);
         if (sslAddress != null) {
             socketInfo = createSSLSocketInfo(hostname, sslAddress.port);
+        } else if (ssl != null) {
+            socketInfo = createSSLSocketInfo(hostname, ssl.port);
         } else {
             // FIXME not all corba object export ssl port
             // if (clientRequiresSsl) {
@@ -116,6 +122,23 @@
public class CSIV2IORToSocketInfo implements IORToSocketInfo {
         return result;
     }
 
+    private SSL getSSL(IOR ior){
+        Iterator iter = ior.getProfile().getTaggedProfileTemplate().iteratorById(TAG_SSL_SEC_TRANS.value);
+        if(!iter.hasNext()){
+            return null;
+        }
+        ORB orb = ior.getORB();
+        TaggedComponent compList = ((com.sun.corba.se.spi.ior.TaggedComponent) iter.next()).getIOPComponent(orb);
+        CDRInputStream in = doPrivileged(new PrivilegedAction<CDRInputStream>() {
+            @Override
+            public CDRInputStream run() {
+                return new EncapsInputStream(orb, compList.component_data, compList.component_data.length);
+            }
+        });
+        in.consumeEndian();
+        return SSLHelper.read(in);
+    }
+
     private TransportAddress selectSSLTransportAddress(IOR ior) {
         CompoundSecMechList compoundSecMechList = readCompoundSecMechList(ior);
         if (compoundSecMechList != null) {
